private BuildStrategy chooseBuildStrategy(BuildContext ctx, File workingCopy) {
	//By default, we do nothing
	BuildStrategy buildStrategy = new BuildNotRequiredStrategy(ctx, workingCopy);

	//Fresh checkout - working copy does not exist or clean build is requested
	if (workingCopyNotFound(workingCopy) || ctx.isForceCleanBuildEnabled()) {
		buildStrategy = new FreshBuildStrategy(ctx, workingCopy);
	} else if (workingCopyIsOutOfDate(workingCopy)) {
		//Most common usage - code has changed, we do only need to update it (no fresh checkout required)
		buildStrategy = new CodeChangedBuildStrategy(ctx, workingCopy);
	}
	log.info("Chosen " + buildStrategy + " build strategy for working copy: " + workingCopy);
	return buildStrategy;
}